#ifndef _Sylph_System_H_
#define _Sylph_System_H_

#include "SylphPrerequisites.h"
#include <string>

///////////////////////////////////////////////////////////////////////
namespace Ogre
{
	class Root;
	class Timer;
}
///////////////////////////////////////////////////////////////////////
namespace Sylph
{
	class _SylphExport SylphSystem
	{
	public:

		SylphSystem();
		~SylphSystem();

		struct WindowOptions
		{
			WindowOptions()
				: name("UnNamed")
				, isFull(false)
				, width(800)
				, height(600)
			{

			}

			std::string name;
			bool isFull;
			int width;
			int height;
			// to do
		};

		struct ConfigOptions
		{
			ConfigOptions()
				: pluginFile("plugins.cfg")
				, logFile("sylph.log")
				, renderSystem("Direct3D9 Rendering Subsystem")
			{

			}

			std::string pluginFile;
			std::string logFile;
			std::string renderSystem;
			//to do
		};	

		virtual void init(const ConfigOptions& options = ConfigOptions());
		virtual bool run();
		virtual void shutDown();

		void createWindow(const WindowOptions& options = WindowOptions());
		void locateResources(const std::string& resourceConfigFile = "resources.cfg");
		void loadResources();

	private:
		Ogre::Root* mRoot;
		Ogre::Timer* mTimer;
		
		unsigned long mCurrentTime;
	};
}
///////////////////////////////////////////////////////////////////////
#endif //~_Sylph_System_H_